package core

import (
	"math/rand"
	"time"
)

type Game interface {
	InitCount() //初始化猜测次数
	SetMinNumber(num int) // 设置最小值
	SetMaxNumber(num int) // 设置最大值
	GenerateTargetNumber() //生成目标数字
	GetNumber() int  // 获取谜底数字
	GetGuess() int  // 获取本地猜测的数字
	SetGuess(guess int) // 设置本次猜测的数字
	GetSmallest() int  // 获取最小数
	GetBiggest() int  // 获取最大数
	GetCurrentGuessTime() int  // 当前猜测次数
	Reset()  //重置
	Check()  // 检查猜测
	IsValidNumberRange() bool  // 输入是否在有效范围
	IsGameWon() bool  // 游戏是否成功
	IsGameLost() bool // 游戏是否失败
	CountInit()		// 猜测次数归零
	CountIncrease()	// 猜测次数增加1
}

type NumberGenerator interface {
	Next() int  // 获取一个随机数
	GetMinNumber() int // 获取最小的数
	GetMaxNumber() int // 获取最大的数
}

type DefaultNumberGenerator struct {
	minNumber	int
	maxNumber	int
}

func (ng *DefaultNumberGenerator) Next() int {
	if ng.maxNumber > ng.minNumber {
		rand.Seed(time.Now().Unix())
		return rand.Intn(ng.maxNumber-ng.minNumber) + ng.minNumber + 1
	} else {
		return ng.maxNumber
	}
}

func (ng *DefaultNumberGenerator) GetMinNumber() int {
	return ng.minNumber
}

func (ng *DefaultNumberGenerator) GetMaxNumber() int {
	return ng.maxNumber
}